#include <SoftwareSerial.h>
#include <CyberLib.h>
//#define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;} 
//#define robot_go {D4_Low; D5_High; D6_High; D7_Low;} 
//#define robot_back {D4_High; D5_Low; D6_Low; D7_High;}
//#define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} 
//#define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} 
//#define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;}
uint8_t inByte;

SoftwareSerial btSerial(9,10);
char incomingByte;  // входящие данные
int  LED = 13;      // LED подключен к 12 пину
int leftDirPin = 4;
int leftSpeedPin = 5;
  
int rightDirPin = 7;
int rightSpeedPin = 6;
  
  
 int runSpeed = 225;
 int runSpeed1 = 50;

void setup()
{
  Serial.begin(9600);   // инициализация порта для тестов
  btSerial.begin(9600);
  pinMode(LED, OUTPUT);
//  motors_init;  //инициализация выходов моторов 
//  D11_Out;  D11_Low;    //динамик
//  randomSeed(A6_Read); //Получить случайное значение 
//  for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота  
//  UART_Init(57600);//инициализация порта для связи с роутером  
  wdt_enable (WDTO_500MS);    //Сторожевая собака 0,5сек.   
  pinMode(leftDirPin, OUTPUT);//инициализация выходов моторов
  pinMode(leftSpeedPin, OUTPUT);
  pinMode(rightDirPin, OUTPUT);
  pinMode(rightSpeedPin, OUTPUT);
}

void loop()
{ 
  if (btSerial.available())
  {
    char incomingByte = btSerial.read();
    switch (incomingByte)  //смотрим какая команда пришла
    {  
        case 'x':  //стоп
            digitalWrite(leftDirPin, LOW);
            digitalWrite(rightDirPin, LOW);
            analogWrite(leftSpeedPin, 0);
            analogWrite(rightSpeedPin, 0);
//        robot_stop;
        break; 
        
        case 'w':  //вперед
            digitalWrite(leftDirPin, HIGH);
            digitalWrite(rightDirPin, HIGH);
            analogWrite(leftSpeedPin, runSpeed1);
            analogWrite(rightSpeedPin, runSpeed1);
             //         robot_go;  
        break;  
        
        case 'a':  //лево
            digitalWrite(leftDirPin, HIGH);
            digitalWrite(rightDirPin, LOW);
            analogWrite(leftSpeedPin, runSpeed1);
            analogWrite(rightSpeedPin, runSpeed);
//          robot_rotation_left; 
        break;

        case 'd': //право
            digitalWrite(leftDirPin, LOW);
            digitalWrite(rightDirPin, HIGH);
            analogWrite(leftSpeedPin, runSpeed);
            analogWrite(rightSpeedPin, runSpeed1);
         //robot_rotation_right; 
        break; 
        
        case 's':  //назад
            digitalWrite(leftDirPin, LOW);
            digitalWrite(rightDirPin, LOW);
            analogWrite(leftSpeedPin, runSpeed);
            analogWrite(rightSpeedPin, runSpeed);
         //robot_back; 
        break;      
    }  
    btSerial.write(incomingByte); 
    Serial.println(incomingByte);
  }
  wdt_reset(); //покормить собаку 
}
